Elasticsearch-এ Bool Query একটি শক্তিশালী কনস্ট্রাক্ট যা আপনাকে একাধিক শর্ত বা কন্ডিশনের ভিত্তিতে ডকুমেন্ট অনুসন্ধান করতে দেয়। এটি মূলত একাধিক কোয়েরি (Query) কে একত্রিত করে জটিল অনুসন্ধান তৈরি করতে ব্যবহৃত হয়। Bool Query-তে চারটি মেইন ক্লজ (Clause) আছে:
- must
- must_not
- should
- filter
এগুলো একসাথে ব্যবহার করে আপনি বিভিন্ন ধরনের জটিল কোয়েরি তৈরি করতে পারেন। নিচে প্রত্যেকটি ক্লজ-এর বিস্তারিত বর্ণনা এবং উদাহরণ দেওয়া হলো:
1. must
- must ক্লজে দেওয়া কোয়েরিগুলি অবশ্যই মিলতে হবে। এটি "AND" অপারেশনের মতো কাজ করে। যদি একাধিক কোয়েরি must ক্লজে থাকে, তাহলে সেই ডকুমেন্টগুলিই রিটার্ন করবে যা প্রত্যেকটি শর্ত পূরণ করে।
উদাহরণ:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } },
{ "match": { "content": "tutorial" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর title-এ "Elasticsearch" এবং content-এ "tutorial" আছে।
2. must_not
- must_not ক্লজটি সেই ডকুমেন্টগুলো বাদ দেয় যেগুলো এই শর্ত পূরণ করে। এটি "NOT" অপারেশনের মতো কাজ করে।
উদাহরণ:
{
"query": {
"bool": {
"must_not": [
{ "match": { "author": "unknown" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর author ফিল্ডে "unknown" নেই।
3. should
- should ক্লজ ব্যবহার করা হয় ঐচ্ছিক শর্ত দেওয়ার জন্য। যদি একটি ডকুমেন্ট should ক্লজের অন্তত একটি শর্ত পূরণ করে, তাহলে সেই ডকুমেন্টটি ম্যাচ করবে। এটি "OR" অপারেশনের মতো কাজ করে। যদি একাধিক should ক্লজ থাকে এবং সবগুলিই পূরণ হয়, তাহলে সেই ডকুমেন্টটির স্কোর বেশি হবে।
উদাহরণ:
{
"query": {
"bool": {
"should": [
{ "match": { "tags": "Elasticsearch" } },
{ "match": { "tags": "tutorial" } }
],
"minimum_should_match": 1
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর tags ফিল্ডে "Elasticsearch" বা "tutorial" আছে।
4. filter
- filter ক্লজ ফিল্টারিংয়ের জন্য ব্যবহৃত হয় এবং এটি শর্ত পূরণ করতে হবে। must-এর মতোই কাজ করে, তবে এটি স্কোরিং (relevance score) প্রভাবিত করে না। এটি পারফরম্যান্স বৃদ্ধিতে সাহায্য করে কারণ ফিল্টার ক্যাশ করা যায়।
উদাহরণ:
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
এখানে শুধুমাত্র সেই ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর status ফিল্ডে "published" আছে।
পূর্ণাঙ্গ উদাহরণ
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } }
],
"must_not": [
{ "term": { "author": "anonymous" } }
],
"should": [
{ "match": { "tags": "tutorial" } },
{ "match": { "tags": "guide" } }
],
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
উপরের উদাহরণে:
- must: ডকুমেন্টের title-এ "Elasticsearch" থাকতে হবে।
- must_not: ডকুমেন্টের author-এ "anonymous" থাকলে সেটি বাদ দেওয়া হবে।
- should: ডকুমেন্টের tags-এ "tutorial" বা "guide" থাকলে স্কোর বেশি হবে।
- filter: status ফিল্ডে "published" থাকতে হবে।
Bool Query প্রয়োগ
Bool Query Elasticsearch-এ জটিল সার্চ অপারেশন তৈরি করতে অত্যন্ত উপযোগী। উদাহরণস্বরূপ, আপনি আপনার ডাটাবেস থেকে নির্দিষ্ট কীওয়ার্ড খুঁজে বের করতে, অবাঞ্ছিত কন্টেন্ট বাদ দিতে, অথবা ফিল্টারিং করতে Bool Query ব্যবহার করতে পারেন।
Read more